double之间的加减乘除运算不能直接进行,需要运用BigDecimal进行转换。 您所在的位置:网站首页 c语言 double取模运算 double之间的加减乘除运算不能直接进行,需要运用BigDecimal进行转换。

double之间的加减乘除运算不能直接进行,需要运用BigDecimal进行转换。

2023-07-24 00:44| 来源: 网络整理| 查看: 265

    double类型之间的运算不能直接使用Double来直接进行运算:因为计算机是二进制的。浮点数没有办法是用二进制进行精确表示。我们的CPU表示浮点数由两个部分组成:指数和尾数,这样的表示方法一般都会失去一定的精确度,有些浮点数运算也会产生一定的误差。

    在大多数的商业计算中,一般采用java.math.BigDecimal类来进行精确计算。

    在使用BigDecimal类来进行计算的时候,主要分为以下步骤:

     1、用float或者double变量构建BigDecimal对象。     2、通过调用BigDecimal的加,减,乘,除等相应的方法进行算术运算。     3、把BigDecimal对象转换成float,double,int等类型。

    进行相应的计算后,我们可能需要将BigDecimal对象转换成相应的基本数据类型的变量,可以使用floatValue(),doubleValue()等方法。

    下面是一个工具类,该工具类提供加,减,乘,除运算。

public class Arith {     public  static double add(double v1,double v2){               BigDecimal b1 = new BigDecimal(Double.toString(v1));               BigDecimal b2 = new BigDecimal(Double.toString(v2));               return b1.add(b2).doubleValue();           }       // 进行减法运算     public static double sub(double v1,double v2){             BigDecimal b1 = new BigDecimal(Double.toString(v1));               BigDecimal b2 = new BigDecimal(Double.toString(v2));               return b1.subtract(b2).doubleValue();           }     // 进行加法运算     public static double mul(double d1, double d2){        // 进行乘法运算              BigDecimal b1 = new BigDecimal(d1);              BigDecimal b2 = new BigDecimal(d2);             return b1.multiply(b2).doubleValue();          }     // 进行除法运算     public static  double div(double d1,double d2,int len) {// 进行除法运算              BigDecimal b1 = new BigDecimal(d1);              BigDecimal b2 = new BigDecimal(d2);             return b1.divide(b2,len,BigDecimal.ROUND_HALF_UP).doubleValue();          }     // 进行四舍五入操作         public  double round(double d,int len) {     // 进行四舍五入操作              BigDecimal b1 = new BigDecimal(d);              BigDecimal b2 = new BigDecimal(1);             // 任何一个数字除以1都是原数字             // ROUND_HALF_UP是BigDecimal的一个常量,表示进行四舍五入的操作             return b1.divide(b2, len,BigDecimal.ROUND_HALF_UP).doubleValue();          } }

示例:

public static void main(String[] args) throws IllegalAccessException { // TODO Auto-generated method stub double a = 1.0; double b = 0.3; double c = a-b; System.out.println(c); System.out.println("-------------"); System.out.println(a+"和"+b+"相减:"+ Arith.sub(a, b)); System.out.println(a+"和"+b+"相加:"+ Arith.add(a, b)); System.out.println(a+"和"+b+"相乘:"+ Arith.mul(a, b)); System.out.println(a+"和"+b+"相除:"+ Arith.div(a,b,3)); // System.out.println(div(1.0,0.3, 3)); }

结果输出为:



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有